/**
 * This file is Copyright © 2008 Software Craftsmen Limited. All Rights Reserved.
 */
package com.softwarecraftsmen.cachecontrol;

import org.jetbrains.annotations.NotNull;
import com.softwarecraftsmen.cachecontrol.keys.Key;

public interface Cache<V>
{
	public abstract @NotNull Key<V> identifier();

	public abstract @NotNull Item<V> obtain(@NotNull final Key<V> key);

	public abstract @NotNull Item<V> obtain(@NotNull final Object ... orderedKeyComponents);

	public abstract @NotNull Item<V> store(final @NotNull Key<V> key, final @NotNull V value);

	public abstract @NotNull Value<V> put(final @NotNull V value);

	public abstract	@NotNull CacheAndKey<V> at(@NotNull final Object... orderedKeyComponents);
}
